

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Establish a database connection and retrieve the inventory and User settings &mdash; geoslurp v1.1.0 documentation</title>
  

  
  
    <link rel="shortcut icon" href="../_static/favicon.ico"/>
  
  
  

  

  
  
    

  

  
  
    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  

  

  
        <link rel="index" title="Index"
              href="../genindex.html"/>
        <link rel="search" title="Search" href="../search.html"/>
    <link rel="top" title="geoslurp v1.1.0 documentation" href="../index.html"/>
        <link rel="up" title="Python Examples" href="pyexamples.html"/>
        <link rel="next" title="Downloading and registering “catalogue” datasets" href="UsingCataloguedDsets.html"/>
        <link rel="prev" title="Python Examples" href="pyexamples.html"/> 

  
  <script src="../_static/js/modernizr.min.js"></script>

</head>

<body class="wy-body-for-nav" role="document">

   
  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search">
          

          
            <a href="../index.html" class="icon icon-home"> geoslurp
          

          
          </a>

          
            
            
              <div class="version">
                1.1.0
              </div>
            
          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../introduction.html">An introduction to Geoslurp</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation of the geoslurp package and setting up the PostgreSQL instance</a></li>
<li class="toctree-l1"><a class="reference internal" href="../confsettings.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../examples.html">Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../usingcli.html">Using the command line tool geoslurp</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="pyexamples.html">Python Examples</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Establish a database connection and retrieve the inventory and User settings</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#Read-only-user-versus-priviliged-user">Read-only user versus priviliged user</a></li>
<li class="toctree-l4"><a class="reference internal" href="#Using-geoslurpConnect">Using geoslurpConnect</a></li>
<li class="toctree-l4"><a class="reference internal" href="#Alternatively-one-can-use-the-class-GeoslurpConnector-and-provide-all-connections-details-manually">Alternatively one can use the class GeoslurpConnector and provide all connections details manually</a></li>
<li class="toctree-l4"><a class="reference internal" href="#Loading-the-Dataset-Inventory">Loading the Dataset Inventory</a></li>
<li class="toctree-l4"><a class="reference internal" href="#Setting-and-getting-usersettings-from-the-database">Setting and getting usersettings from the database</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="UsingCataloguedDsets.html">Downloading and registering “catalogue” datasets</a></li>
<li class="toctree-l3"><a class="reference internal" href="CreateDynDSet.html">Download and register a dynamic dataset of (crowd-sourced?) US Marijuana street prices</a></li>
<li class="toctree-l3"><a class="reference internal" href="BasicDiscovery.html">Discovery techniques</a></li>
<li class="toctree-l3"><a class="reference internal" href="export2Portable.html">Exporting parts of the database to portable formats</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../reference.html">Reference Documentation</a></li>
</ul>

            
          
        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../index.html">geoslurp</a>
        
      </nav>


      
      <div class="wy-nav-content">
        <div class="rst-content">
          















<div role="navigation" aria-label="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../index.html">Docs</a> &raquo;</li>
        
          <li><a href="../examples.html">Tutorial</a> &raquo;</li>
        
          <li><a href="pyexamples.html">Python Examples</a> &raquo;</li>
        
      <li>Establish a database connection and retrieve the inventory and User settings</li>
    
    
      <li class="wy-breadcrumbs-aside">
        
            
            <a href="../_sources/examples/connectnQuery.ipynb.txt" rel="nofollow"> View page source</a>
          
        
      </li>
    
  </ul>

  
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
  
<style>
/* CSS for nbsphinx extension */

/* remove conflicting styling from Sphinx themes */
div.nbinput,
div.nbinput div.prompt,
div.nbinput div.input_area,
div.nbinput div[class*=highlight],
div.nbinput div[class*=highlight] pre,
div.nboutput,
div.nbinput div.prompt,
div.nbinput div.output_area,
div.nboutput div[class*=highlight],
div.nboutput div[class*=highlight] pre {
    background: none;
    border: none;
    padding: 0 0;
    margin: 0;
    box-shadow: none;
}

/* avoid gaps between output lines */
div.nboutput div[class*=highlight] pre {
    line-height: normal;
}

/* input/output containers */
div.nbinput,
div.nboutput {
    display: -webkit-flex;
    display: flex;
    align-items: flex-start;
    margin: 0;
    width: 100%;
}
@media (max-width: 540px) {
    div.nbinput,
    div.nboutput {
        flex-direction: column;
    }
}

/* input container */
div.nbinput {
    padding-top: 5px;
}

/* last container */
div.nblast {
    padding-bottom: 5px;
}

/* input prompt */
div.nbinput div.prompt pre {
    color: #303F9F;
}

/* output prompt */
div.nboutput div.prompt pre {
    color: #D84315;
}

/* all prompts */
div.nbinput div.prompt,
div.nboutput div.prompt {
    min-width: 8ex;
    padding-top: 0.4em;
    padding-right: 0.4em;
    text-align: right;
    flex: 0;
}
@media (max-width: 540px) {
    div.nbinput div.prompt,
    div.nboutput div.prompt {
        text-align: left;
        padding: 0.4em;
    }
    div.nboutput div.prompt.empty {
        padding: 0;
    }
}

/* disable scrollbars on prompts */
div.nbinput div.prompt pre,
div.nboutput div.prompt pre {
    overflow: hidden;
}

/* input/output area */
div.nbinput div.input_area,
div.nboutput div.output_area {
    padding: 0.4em;
    -webkit-flex: 1;
    flex: 1;
    overflow: auto;
}
@media (max-width: 540px) {
    div.nbinput div.input_area,
    div.nboutput div.output_area {
        width: 100%;
    }
}

/* input area */
div.nbinput div.input_area {
    border: 1px solid #cfcfcf;
    border-radius: 2px;
    background: #f7f7f7;
}

/* override MathJax center alignment in output cells */
div.nboutput div[class*=MathJax] {
    text-align: left !important;
}

/* override sphinx.ext.pngmath center alignment in output cells */
div.nboutput div.math p {
    text-align: left;
}

/* standard error */
div.nboutput div.output_area.stderr {
    background: #fdd;
}

/* ANSI colors */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-default-inverse-fg { color: #FFFFFF; }
.ansi-default-inverse-bg { background-color: #000000; }

.ansi-bold { font-weight: bold; }
.ansi-underline { text-decoration: underline; }

/* CSS overrides for sphinx_rtd_theme */

/* 24px margin */
.nbinput.nblast,
.nboutput.nblast {
    margin-bottom: 19px;  /* padding has already 5px */
}

/* ... except between code cells! */
.nblast + .nbinput {
    margin-top: -19px;
}

.admonition > p:before {
    margin-right: 4px;  /* make room for the exclamation icon */
}
</style>
<div class="section" id="Establish-a-database-connection-and-retrieve-the-inventory-and-User-settings">
<h1>Establish a database connection and retrieve the inventory and User settings<a class="headerlink" href="#Establish-a-database-connection-and-retrieve-the-inventory-and-User-settings" title="Permalink to this headline">¶</a></h1>
<p>Internally, geoslurp uses the python sqlalchemy tools to establish a
connection with the database. The information provided is therefore
similar (hostname+port, username, password). This information can be
provided directly to the constructor of
<a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.connector.GeoslurpConnector">GeoslurpConnector</a>.
Alternatively, the convenience function
<a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.geoslurpdb.geoslurpConnect">geoslurpConnect</a>
uses <a class="reference external" href="../installation.html#local-configuration-settings">local
settings</a> from the
file <code class="docutils literal notranslate"><span class="pre">.geoslurp_lastused.yaml</span></code> in the users’s home. This has the
advantage that possible sensitive information (logins, passwords) does
not need to be stored in notebooks such as these.</p>
<div class="section" id="Read-only-user-versus-priviliged-user">
<h2>Read-only user versus priviliged user<a class="headerlink" href="#Read-only-user-versus-priviliged-user" title="Permalink to this headline">¶</a></h2>
<p>For the majority of the query operations, it is not needed to have write
privileges to the database tables. For this purpose, it is recommended
to access the database with a readonly user to avoid making unwanted
changes to the tables. How this is done is shown below.</p>
</div>
<div class="section" id="Using-geoslurpConnect">
<h2>Using geoslurpConnect<a class="headerlink" href="#Using-geoslurpConnect" title="Permalink to this headline">¶</a></h2>
<p>There are <a class="reference external" href="../installation.html#specifying-passwords">several ways to specify
passwords</a> for use with
the convenience function geoslurpConnect, some which are more secure
than others.</p>
<div class="nbinput nblast docutils container">
<div class="prompt highlight-none notranslate"><div class="highlight"><pre>
<span></span>In [1]:
</pre></div>
</div>
<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre>
<span></span><span class="c1">#Connect to a database using the settings in ${HOME}/.geoslurp_lastused.yaml</span>
<span class="kn">from</span> <span class="nn">geoslurp.db</span> <span class="k">import</span> <span class="n">geoslurpConnect</span>

<span class="c1">#connect to the database with the normal user as specified in ${HOME}/.geoslurp_lastused.yaml</span>
<span class="n">dbcon</span><span class="o">=</span><span class="n">geoslurpConnect</span><span class="p">(</span><span class="n">readonlyuser</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>

<span class="c1">#Connect to a database with the readonly user as specified in ${HOME}/.geoslurp_lastused.yaml</span>
<span class="n">dbconReadOnly</span><span class="o">=</span><span class="n">geoslurpConnect</span><span class="p">()</span>



</pre></div>
</div>
</div>
</div>
<div class="section" id="Alternatively-one-can-use-the-class-GeoslurpConnector-and-provide-all-connections-details-manually">
<h2>Alternatively one can use the class <a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.connector.GeoslurpConnector">GeoslurpConnector</a> and provide all connections details manually<a class="headerlink" href="#Alternatively-one-can-use-the-class-GeoslurpConnector-and-provide-all-connections-details-manually" title="Permalink to this headline">¶</a></h2>
<p>This will <strong>not</strong> consult the file <code class="docutils literal notranslate"><span class="pre">${HOME}/.geoslurp_lastused.yaml</span></code>
and can look like:</p>
<p><code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">geoslurp.db</span> <span class="pre">import</span> <span class="pre">GeoslurpConnector</span> <span class="pre">dbcon=GeoslurpConnector(host=&quot;geoslurphost&quot;,user=&quot;yourusername&quot;)</span></code></p>
<p>The above will prompt for a password but if this is not desired one can
non-interactively initiate a connection as:</p>
<p><code class="docutils literal notranslate"><span class="pre">dbcon=GeoslurpConnector(host=&quot;geoslurphost&quot;,user=&quot;slurpy&quot;,passwd=&quot;supersecretpassword&quot;)</span></code></p>
<p>Note that this <strong>not recommended</strong> for code which is likely to be shared
later, such as for example jupyter notebooks such as this.</p>
</div>
<div class="section" id="Loading-the-Dataset-Inventory">
<h2>Loading the Dataset Inventory<a class="headerlink" href="#Loading-the-Dataset-Inventory" title="Permalink to this headline">¶</a></h2>
<p>The
<a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.inventory.Inventory">Inventory</a>
class is coupled to the <em>admin.inventory</em> table in the database, and
contains information on registered datasets. One can load the data the
table by initializing a Inventory class instance with a database
connection such as obtained from above. Entries (i.e.) can be requested
or iterated over as shown below.</p>
<div class="nbinput docutils container">
<div class="prompt highlight-none notranslate"><div class="highlight"><pre>
<span></span>In [2]:
</pre></div>
</div>
<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">geoslurp.db</span> <span class="k">import</span> <span class="n">Inventory</span>


<span class="n">inventory</span><span class="o">=</span><span class="n">Inventory</span><span class="p">(</span><span class="n">dbcon</span><span class="p">)</span>

<span class="n">entry</span><span class="o">=</span><span class="n">inventory</span><span class="p">[</span><span class="s2">&quot;globalgis.gshhs_c&quot;</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">scheme</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">dataset</span><span class="p">,</span> <span class="n">entry</span><span class="o">.</span><span class="n">pgfunc</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">owner</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">lastupdate</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">version</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">cache</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">datadir</span><span class="p">,</span><span class="n">entry</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>

<span class="n">dsets</span><span class="o">=</span><span class="p">[</span><span class="n">ds</span><span class="o">.</span><span class="n">dataset</span> <span class="k">for</span> <span class="n">ds</span> <span class="ow">in</span> <span class="n">inventory</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;found </span><span class="si">%d</span><span class="s2"> registered datasets&quot;</span><span class="o">%</span><span class="k">len</span>(dsets))


</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div class="highlight"><pre>
globalgis gshhs_c None roelof 2019-02-27 09:47:02.441119 (0, 0, 0) None None {&#39;GSHHGversion&#39;: [2, 3, 7]}
found 150 registered datasets
</pre></div></div>
</div>
</div>
<div class="section" id="Setting-and-getting-usersettings-from-the-database">
<h2>Setting and getting usersettings from the database<a class="headerlink" href="#Setting-and-getting-usersettings-from-the-database" title="Permalink to this headline">¶</a></h2>
<p>In contrast to settings which are specific for a host and user, the
database also contains a table, <em>admin.settings</em> which contains settings
which are specific to the server and user. These can be loaded by
initializing a
<a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.settings.Settings">Settings</a>
class. Note that the read-only user does not have any settings stored in
the database and has no read permission to the table.</p>
<div class="section" id="Default-settings">
<h3>Default settings<a class="headerlink" href="#Default-settings" title="Permalink to this headline">¶</a></h3>
<p>The <em>admin.settings</em> table has a <em>default</em> entry which contains settings
which are valid for all users, unless they are overruled by the user
themselves.</p>
<div class="nbinput docutils container">
<div class="prompt highlight-none notranslate"><div class="highlight"><pre>
<span></span>In [3]:
</pre></div>
</div>
<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre>
<span></span><span class="kn">from</span> <span class="nn">geoslurp.db</span> <span class="k">import</span> <span class="n">Settings</span>
<span class="kn">import</span> <span class="nn">random</span>

<span class="n">conf</span><span class="o">=</span><span class="n">Settings</span><span class="p">(</span><span class="n">dbcon</span><span class="p">)</span>

<span class="c1">#to show the user settings:</span>
<span class="c1">#conf.show()</span>

<span class="c1"># try setting an entry</span>
<span class="n">testvalue</span><span class="o">=</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span>
<span class="n">conf</span><span class="p">[</span><span class="s2">&quot;test&quot;</span><span class="p">]</span><span class="o">=</span><span class="n">testvalue</span>
<span class="c1">#synchronize the settings with the database</span>
<span class="n">conf</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>

<span class="c1">#load the settings from the database</span>
<span class="n">conf2</span><span class="o">=</span><span class="n">Settings</span><span class="p">(</span><span class="n">dbcon</span><span class="p">)</span>
<span class="k">if</span> <span class="n">testvalue</span> <span class="o">==</span> <span class="n">conf2</span><span class="p">[</span><span class="s2">&quot;test&quot;</span><span class="p">]:</span>
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;succesfully set and synchronize an user setting&quot;</span><span class="p">)</span>

<span class="c1">#clean up after ourselves</span>
<span class="k">del</span> <span class="n">conf</span><span class="p">[</span><span class="s2">&quot;test&quot;</span><span class="p">]</span>


</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div class="highlight"><pre>
succesfully set and synchronize an user setting
</pre></div></div>
</div>
</div>
<div class="section" id="Storing-and-retrieving-Authentication-details">
<h3>Storing and retrieving Authentication details<a class="headerlink" href="#Storing-and-retrieving-Authentication-details" title="Permalink to this headline">¶</a></h3>
<p>To enable non-interactive downloading, users may need to access
webservices which require authentication details. These authentication
details are also stored in the settings table of the database, but as
this is sensitive information, the authentication data is encrypted in
the database. The encryption is based on the user’s password, <strong>which is
unknown to the database</strong> (only the hash is known to the database).
Consequently, the authentication details can only be decrypted on
clients. The implication of this is that <strong>it is not possible to
retrieve the authentication data, when a user forgets their password</strong>.</p>
<p>The
<a class="reference external" href="../reference/geoslurp.db.html#geoslurp.db.settings.Credentials">Credentials</a>
is a named tuple which is used to store the authentication details.</p>
<div class="nbinput docutils container">
<div class="prompt highlight-none notranslate"><div class="highlight"><pre>
<span></span>In [6]:
</pre></div>
</div>
<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre>
<span></span><span class="c1">#store new authentication details</span>
<span class="kn">from</span> <span class="nn">geoslurp.db</span> <span class="k">import</span> <span class="n">Credentials</span>
<span class="kn">import</span> <span class="nn">string</span>


<span class="n">passw</span><span class="o">=</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span><span class="p">)</span>


<span class="n">testauth</span><span class="o">=</span><span class="n">Credentials</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;servicex&quot;</span><span class="p">,</span><span class="n">user</span><span class="o">=</span><span class="s2">&quot;donny&quot;</span><span class="p">,</span><span class="n">passw</span><span class="o">=</span><span class="n">passw</span><span class="p">)</span>

<span class="n">conf</span><span class="o">.</span><span class="n">updateAuth</span><span class="p">(</span><span class="n">testauth</span><span class="p">)</span>

<span class="n">conf2</span><span class="o">=</span><span class="n">Settings</span><span class="p">(</span><span class="n">dbcon</span><span class="p">)</span>
<span class="n">cred2</span><span class="o">=</span><span class="n">conf2</span><span class="o">.</span><span class="n">authCred</span><span class="p">(</span><span class="s2">&quot;servicex&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cred2</span><span class="o">.</span><span class="n">passw</span> <span class="o">==</span> <span class="n">passw</span><span class="p">:</span>
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;succesfully stored and retrieved authentication credentials&quot;</span><span class="p">)</span>

<span class="c1">#clean up</span>
<span class="n">conf</span><span class="o">.</span><span class="n">delAuth</span><span class="p">(</span><span class="s2">&quot;servicex&quot;</span><span class="p">)</span>

</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div class="highlight"><pre>
succesfully stored and retrieved authentication credentials
</pre></div></div>
</div>
</div>
</div>
</div>


           </div>
           <div class="articleComments">
            
           </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="UsingCataloguedDsets.html" class="btn btn-neutral float-right" title="Downloading and registering “catalogue” datasets" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="pyexamples.html" class="btn btn-neutral" title="Python Examples" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
        &copy; Copyright 2020, Roelof Rietbroek.

    </p>
  </div>
  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 

</footer>

        </div>
      </div>

    </section>

  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'../',
            VERSION:'v1.1.0',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
            HAS_SOURCE:  true,
            SOURCELINK_SUFFIX: '.txt'
        };
    </script>
      <script type="text/javascript" src="../_static/jquery.js"></script>
      <script type="text/javascript" src="../_static/underscore.js"></script>
      <script type="text/javascript" src="../_static/doctools.js"></script>

  

  
  
    <script type="text/javascript" src="../_static/js/theme.js"></script>
  

  
  
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.StickyNav.enable();
      });
  </script>
   

</body>
</html>